define(["dojo/_base/declare", "dojo/_base/lang", "esri/geometry/Point", "esri/geometry/ScreenPoint"], function(e, t, n, i) {
    return e("Echarts3Layer", null, {
        name: "Echarts3Layer",
        _map: null,
        _ec: null,
        _geoCoord: [],
        _option: null,
        _mapOffset: [0, 0],
        constructor: function(e, t) {
            this._map = e;
            var n = this._echartsContainer = document.createElement("div");
            n.style.position = "absolute";
            n.style.height = e.height + "px";
            n.style.width = e.width + "px"
            n.style.top = 0;
            n.style.left = 0;
            e.__container.appendChild(n);
            this._init(e, t)
        },
        _init: function(e, t) {
            var o = this;
            o._map = e;
            o._ec = t;
            o.getEchartsContainer = function() {
                return o._echartsContainer
            }
            o.getMap = function() {
                return o._map
            }
            o.geoCoord2Pixel = function(e) {
                var t = new n(e[0], e[1]),
                    i = o._map.toScreen(t);
                return [i.x, i.y]
            }
            o.pixel2GeoCoord = function(e) {
                var t = o._map.toMap(new i(e[0], e[1]));
                return [t.lng, t.lat]
            }
            
            o.getECharts = function() {
                return o._ec
            }
            o.setOption = function(e, t) {
                o._option = e;
                o._ec.setOption(e, t)
            }
            o.setVisibility = function(visible){
                if(visible){
                    o._echartsContainer.style.visibility = "visible";
                }else{
                    o._echartsContainer.style.visibility = "hidden";
                }
            }
            o.resetOption = function(){
                if(o._ec.getOption()){
                    o._ec.setOption({
                        series: [{
                            boundingCoords: [[o._map.extent.xmin,o._map.extent.ymax],[o._map.extent.xmax,o._map.extent.ymin]]
                        }]
                    })
                }
                o._ec.resize();
                o._echartsContainer.style.visibility = "visible"
            }
            o._bindEvent = function() {
                console.log('_bindEvent', o._map);
                o._map.on("zoom-end", function(e) {
                    console.log('zoom-end')
                    // o._ec.resize(), o._echartsContainer.style.visibility = "visible"
                    o.resetOption();
                });
                o._map.on("zoom-start", function(e) {
                    console.log('zoom-start')
                    o._echartsContainer.style.visibility = "hidden"
                });
                o._map.on("pan", function(e) {
                    o._echartsContainer.style.visibility = "hidden"
                });
                o._map.on("pan-end", function(e) {
                    // o._ec.resize(), o._echartsContainer.style.visibility = "visible"
                    o.resetOption();
                });
                o._map.on("resize", function() {
                    var e = o._echartsContainer.parentNode.parentNode.parentNode;
                    o._mapOffset = [-parseInt(e.style.left) || 0, -parseInt(e.style.top) || 0];
                    o._echartsContainer.style.left = o._mapOffset[0] + "px";
                    o._echartsContainer.style.top = o._mapOffset[1] + "px";
                    setTimeout(function() {
                        o._map.resize();
                        o._map.reposition();
                        // o._ec.resize()
                        o.resetOption();
                    }, 200);
                    o._echartsContainer.style.visibility = "visible"
                });
                o._ec.getZr().on("dragstart", function(e) {});
                o._ec.getZr().on("dragend", function(e) {});
                o._ec.getZr().on("mousewheel", function(e) {
                    o._lastMousePos = o._map.toMap(new i(e.event.x, e.event.y));
                    var t = e.wheelDelta,
                        n = o._map,
                        a = n.getZoom();
                    t = t > 0 ? Math.ceil(t) : Math.floor(t), t = Math.max(Math.min(t, 4), -4), t = Math.max(n.getMinZoom(), Math.min(n.getMaxZoom(), a + t)) - a, o._delta = 0, o._startTime = null, t && n.setZoom(a + t)
                })
            }

            o.initECharts = function() {
                o._ec = t.init.apply(o, arguments);
                // o._ec.Geo.prototype.dataToPoint = function(e) {
                //     var t = new n(e[0], e[1]),
                //         i = o._map.toScreen(t);
                //     return [i.x, i.y]
                // }
                o._bindEvent();

                return o._ec;

                // return o._ec = t.init.apply(o, arguments), o._ec.Geo.prototype.dataToPoint = function(e) {
                //     var t = new n(e[0], e[1]),
                //         i = o._map.toScreen(t);
                //     return [i.x, i.y]
                // }, o._bindEvent(), o._ec
            }
        }
    })
});